home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / share / libgda / xml / gda-xml-query.xsl < prev   
Encoding:
Text File  |  2007-01-12  |  7.7 KB  |  304 lines

  1. <!--      xml-query.dtd
  2.           Copyright (C) 2001 Gerhard Dieringer
  3.  
  4.   This library is free software; you can redistribute it and/or
  5.   modify it under the terms of the GNU Library General Public
  6.   License as published by the Free Software Foundation; either
  7.   version 2 of the License, or (at your option) any later version.
  8.  
  9.   This library is distributed in the hope that it will be useful,
  10.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.   Library General Public License for more details.
  13.  
  14.   You should have received a copy of the GNU Library General Public
  15.   License along with this library; if not, write to the
  16.   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  17.   Boston, MA 02111-1307, USA.
  18.  
  19. -->
  20.  
  21. <xsl:stylesheet version="1.0"
  22.           xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  23.           xmlns="http://www.w3.org/TR/xhtml1/strict">
  24.  
  25. <xsl:strip-space elements="query select insert update delete"/>
  26. <xsl:strip-space elements="targetlist target joinlist join on valueref"/>
  27. <xsl:strip-space elements="union unionall intersect minus"/>
  28. <xsl:strip-space elements="dest setlist set sourcelist valuelist value"/>
  29. <xsl:strip-space elements="where having group arglist and or column order"/>
  30. <xsl:strip-space elements="not eq ne lt le gt ge null field const func"/>
  31.  
  32. <xsl:output method="text" 
  33.             encoding="iso-8859-1" 
  34.             omit-xml-declaration="yes"
  35.             version="1.0"/>
  36.  
  37. <xsl:template match="query">
  38.    <xsl:apply-templates/>
  39.    <xsl:text>
  40. </xsl:text>
  41. </xsl:template>
  42.  
  43. <xsl:template match="select">
  44.   <xsl:text>select </xsl:text>
  45.   <xsl:apply-templates select="valuelist"/>
  46.   <xsl:apply-templates select="targetlist"/>
  47.   <xsl:apply-templates select="where"/>
  48.   <xsl:apply-templates select="having"/>
  49.   <xsl:apply-templates select="group"/>
  50.   <xsl:apply-templates select="union"/>
  51.   <xsl:apply-templates select="unionall"/>
  52.   <xsl:apply-templates select="intersect"/>
  53.   <xsl:apply-templates select="minus"/>
  54.   <xsl:apply-templates select="order"/>
  55. </xsl:template>
  56.  
  57. <xsl:template match="insert">
  58.   <xsl:text>insert into </xsl:text>
  59.   <xsl:apply-templates select="target"/>
  60.   <xsl:apply-templates select="dest"/>
  61.   <xsl:apply-templates select="sourcelist"/>
  62. </xsl:template>
  63.  
  64. <xsl:template match="update">
  65.   <xsl:text>update </xsl:text>
  66.   <xsl:apply-templates select="target"/>
  67.   <xsl:apply-templates select="setlist"/>
  68.   <xsl:apply-templates select="where"/>
  69. </xsl:template>
  70.  
  71. <xsl:template match="delete">
  72.   <xsl:text>delete from </xsl:text>
  73.   <xsl:apply-templates select="target"/>
  74.   <xsl:apply-templates select="where"/>
  75. </xsl:template>
  76.  
  77. <xsl:template match="targetlist">
  78.   <xsl:text> from </xsl:text>
  79.   <xsl:apply-templates/>
  80. </xsl:template>
  81.  
  82. <xsl:template match="target">
  83.   <xsl:value-of select="@name"/>
  84.   <xsl:text> </xsl:text>
  85. </xsl:template>
  86.  
  87. <xsl:template match="joinlist">
  88.   <xsl:apply-templates/>
  89. </xsl:template>
  90.  
  91. <xsl:template match="join">
  92.   <xsl:value-of select="@type"/>
  93.   <xsl:text> join </xsl:text>
  94.   <xsl:apply-templates/>
  95. </xsl:template>
  96.  
  97. <xsl:template match="on">
  98.   <xsl:text> on </xsl:text>
  99.   <xsl:apply-templates/>
  100. </xsl:template>
  101.  
  102. <xsl:template match="union">
  103.   <xsl:text>union </xsl:text>
  104.   <xsl:apply-templates/>
  105. </xsl:template>
  106.  
  107. <xsl:template match="unionall">
  108.   <xsl:text>union all </xsl:text>
  109.   <xsl:apply-templates/>
  110. </xsl:template>
  111.  
  112. <xsl:template match="intersect">
  113.   <xsl:text>intersect </xsl:text>
  114.   <xsl:apply-templates/>
  115. </xsl:template>
  116.  
  117. <xsl:template match="minus">
  118.   <xsl:text>minus </xsl:text>
  119.   <xsl:apply-templates/>
  120. </xsl:template>
  121.  
  122. <xsl:template match="dest">
  123.   <xsl:text> (</xsl:text>
  124.     <xsl:apply-templates/>
  125.   <xsl:text>) </xsl:text>
  126. </xsl:template>
  127.  
  128. <xsl:template match="setlist">
  129.   <xsl:text>set </xsl:text>
  130.   <xsl:call-template name="open-list"/>
  131. </xsl:template>
  132.  
  133. <xsl:template match="set">
  134.   <xsl:apply-templates select="./*[position()=1]"/>
  135.   <xsl:text> = </xsl:text>
  136.   <xsl:apply-templates select="./*[position()=2]"/>
  137. </xsl:template>
  138.  
  139. <xsl:template match="sourcelist">
  140.   <xsl:text> values (</xsl:text>
  141.   <xsl:apply-templates/>
  142.   <xsl:text>) </xsl:text>
  143. </xsl:template>
  144.  
  145. <xsl:template match="valuelist">
  146.   <xsl:apply-templates/>
  147. </xsl:template>
  148.  
  149. <xsl:template match="value">
  150.   <xsl:apply-templates/>
  151.   <xsl:text> as </xsl:text>
  152.   <xsl:value-of select="@id"/>  
  153.   <xsl:if test="not(last()=position())">
  154.     <xsl:text>, </xsl:text>
  155.   </xsl:if>
  156. </xsl:template>
  157.  
  158. <xsl:template match="where">
  159.   <xsl:text> where </xsl:text>
  160.   <xsl:apply-templates/>
  161. </xsl:template>
  162.  
  163. <xsl:template match="having">
  164.   <xsl:text> having </xsl:text>
  165.   <xsl:apply-templates/>
  166. </xsl:template>
  167.  
  168. <xsl:template match="group">
  169.   <xsl:text> group by </xsl:text>
  170.   <xsl:call-template name="open-list"/>
  171. </xsl:template>
  172.  
  173. <xsl:template match="order">
  174.   <xsl:text> order by </xsl:text>
  175.   <xsl:call-template name="open-list"/>
  176. </xsl:template>
  177.  
  178. <xsl:template match="valueref">
  179.   <xsl:apply-templates select="id(@source)/*"/>
  180. </xsl:template>
  181.  
  182. <xsl:template match="arglist">
  183.   <xsl:text>(</xsl:text>
  184.   <xsl:apply-templates/>
  185.   <xsl:text>)</xsl:text>
  186. </xsl:template>
  187.  
  188. <xsl:template match="not">
  189.   <xsl:text>not(</xsl:text>
  190.   <xsl:apply-templates/>
  191.   <xsl:text>)</xsl:text>
  192. </xsl:template>
  193.  
  194.  
  195. <xsl:template match="null">
  196.   <xsl:text>(</xsl:text>
  197.   <xsl:apply-templates/>
  198.   <xsl:text> is null)</xsl:text>
  199. </xsl:template>
  200.  
  201.  
  202. <xsl:template match="field">
  203.   <xsl:if test="string-length(@source)>0">
  204.     <xsl:value-of select="concat(@source,'.')"/>
  205.   </xsl:if>
  206.   <xsl:value-of select="@name"/>
  207. </xsl:template>
  208.  
  209. <xsl:template match="const">
  210.   <xsl:if test="@type='char'">
  211.     <xsl:text>'</xsl:text>
  212.   </xsl:if>
  213.   <xsl:value-of select="@value"/>
  214.   <xsl:if test="@type='char'">
  215.     <xsl:text>'</xsl:text>
  216.   </xsl:if>
  217. </xsl:template>
  218.  
  219. <xsl:template match="func">
  220.   <xsl:value-of select="@name"/>
  221.   <xsl:apply-templates/>
  222. </xsl:template>
  223.  
  224. <xsl:template match="sourcelist">
  225.   <xsl:text> values </xsl:text>
  226.   <xsl:call-template name="closed-list"/>
  227. </xsl:template>
  228.  
  229. <xsl:template match="column">
  230.   <xsl:value-of select="@num"/>
  231. </xsl:template>
  232.  
  233. <xsl:template match="arglist|dest">
  234.   <xsl:call-template name="closed-list"/>
  235. </xsl:template>
  236.  
  237. <xsl:template match="eq">
  238.   <xsl:call-template name="closed-list">
  239.     <xsl:with-param name="delim" select="' = '"/>
  240.   </xsl:call-template>
  241. </xsl:template>
  242.  
  243. <xsl:template match="ne">
  244.   <xsl:call-template name="closed-list">
  245.     <xsl:with-param name="delim" select="' <> '"/>
  246.   </xsl:call-template>
  247. </xsl:template>
  248.  
  249. <xsl:template match="gt">
  250.   <xsl:call-template name="closed-list">
  251.     <xsl:with-param name="delim" select="' > '"/>
  252.   </xsl:call-template>
  253. </xsl:template>
  254.  
  255. <xsl:template match="ge">
  256.   <xsl:call-template name="closed-list">
  257.     <xsl:with-param name="delim" select="' >= '"/>
  258.   </xsl:call-template>
  259. </xsl:template>
  260.  
  261. <xsl:template match="lt">
  262.   <xsl:call-template name="closed-list">
  263.     <xsl:with-param name="delim" select="' < '"/>
  264.   </xsl:call-template>
  265. </xsl:template>
  266.  
  267. <xsl:template match="le">
  268.   <xsl:call-template name="closed-list">
  269.     <xsl:with-param name="delim" select="' <= '"/>
  270.   </xsl:call-template>
  271. </xsl:template>
  272.  
  273. <xsl:template match="and|or">
  274.   <xsl:call-template name="closed-list">
  275.     <xsl:with-param name="delim" select="concat(' ',name(.),' ')"/>
  276.   </xsl:call-template>
  277. </xsl:template>
  278.  
  279. <xsl:template name="closed-list">
  280.   <xsl:param name="delim" select="', '"/>
  281.   <xsl:text>(</xsl:text>
  282.   <xsl:for-each select="./*">
  283.     <xsl:apply-templates select="."/>
  284.     <xsl:if test="not(position()=last())">
  285.       <xsl:value-of select="$delim"/>
  286.     </xsl:if>
  287.   </xsl:for-each>
  288.   <xsl:text>)</xsl:text>
  289. </xsl:template>
  290.  
  291. <xsl:template name="open-list">
  292.   <xsl:param name="delim" select="', '"/>
  293.   <xsl:for-each select="./*">
  294.     <xsl:apply-templates select="."/>
  295.     <xsl:if test="not(position()=last())">
  296.       <xsl:value-of select="$delim"/>
  297.     </xsl:if>
  298.   </xsl:for-each>
  299. </xsl:template>
  300.  
  301.  
  302. </xsl:stylesheet>
  303.  
  304.